<?php

/* 11/08/2011

   Modulo donde se efectuaran las trasacciones entre usuarios
   que seran llamados por el servicio web (Representational State Transfer)

 -trim       = elimina espacion en blanco en la cadena.
 -strtolower = toda la cadena a minuscula.

 */
class xml_servicio_pagosActions extends sfActions
{
 /**
  * Executes index action
  *
  * @param sfRequest $request A request object
  */
  public function executeIndex(sfWebRequest $request)
  {

  }


public function executeCompra_paqueteusuario(sfWebRequest $request){
     $request->setRequestFormat('xml');
     $recurso = new myLib();

     try{
        $con = Propel::getConnection();
        $con->beginTransaction();

        $token_seguridad = $request->getParameter('token');
      if($recurso->executeToken($token_seguridad)){ //valida token de seguridad

        //recibiendo parametros
        $fecha = time("d/m/a");
        $monto_compra = $request->getParameter('monto_compra');
        $usuario_comprador_id = $request->getParameter('codigo_usuario');
        $paquete_id = $request->getParameter('paquete_id');
        $estado_compra = $request->getParameter('estado');
        //verifico si el monto enviado es igual al costo del paquete
        //busco el paquete
        $objeto_paquete = $recurso->executeRetorna_paquete($paquete_id);
        if(is_object($objeto_paquete)){
            if($objeto_paquete->getPrecioActual()==$monto_compra){
        //verifico si el usuario puede comprar el paqiuete segin su credito
        //busco usuario
        $objeto_usuario = $recurso->executeRetorna_usuario($usuario_comprador_id);
        if(is_object($objeto_usuario)){

        //verifico que el usuario no haya comprado el paquete o que no lo tenga en estado habilitado
        $paquetes_habilitados = $recurso->executePaquetes_usuarios($objeto_usuario->getId(),$objeto_paquete->getId());
        if($paquetes_habilitados == true){
            $this->respuesta = "3019";
            return sfView::ERROR;
        }else{
            $monto_actual_usuario = $objeto_usuario->getCredito();
            if($monto_actual_usuario>= $monto_compra){
                //primero busco si exite en la tabla Usuario_paquete un registro
                //con el estado habilitado
                try{
                $busqueda_usuario_paquete = new Criteria();
                $busqueda_usuario_paquete->add(UsuarioPaquetePeer::USUARIO_ID, $objeto_usuario->getId());
                $busqueda_usuario_paquete->add(UsuarioPaquetePeer::FLAGS, "H");

                $numero_registros = UsuarioPaquetePeer::doCount($busqueda_usuario_paquete);
                if($numero_registros > 0){
                $regitro_encontrado =  UsuarioPaquetePeer::doSelectOne($busqueda_usuario_paquete);
                $regitro_encontrado ->setFlags("D");
                $regitro_encontrado->save();
                }

               }catch(Exception $e){
               $con->rollback();
              throw $e;
              $this->respuesta = "3020";
              return sfView::ERROR;
                }
                //ingreso datos a latabla Usuario_paquete
                try{
                $new_usuario_paquete = new UsuarioPaquete();
                $new_usuario_paquete->setFechaCompra($fecha);
                $new_usuario_paquete->setUsuarioId($usuario_comprador_id);
                $new_usuario_paquete->setPaqueteId($paquete_id);
                $new_usuario_paquete->setPrecioComprado($monto_compra);
                $new_usuario_paquete->setFlags("H");
                $new_usuario_paquete->save();
                }catch(Exception $e){
              $con->rollback();
              throw $e;
              $this->respuesta = "1016";
              return sfView::ERROR;
                }
                try{
                   $objeto_usuario->setCredito($objeto_usuario->getCredito()-$monto_compra);
                   $objeto_usuario->save();

               }catch(Exception $e){
              $con->rollback();
              throw $e;
              $this->respuesta = "3011";
              return sfView::ERROR;
               }
               try{
                 $new_cuenta_usuario = new EstadoCuentaUsuario();
                 $new_cuenta_usuario->setMonto($monto_compra);
                 $new_cuenta_usuario->setFechaTrasaccion($fecha);
                 $new_cuenta_usuario->setDescripcionTrasaccion("Compra de´Paquete :".$objeto_paquete->getDescripcion());
                 $new_cuenta_usuario->setMovimientoOperacion("S");
                 $new_cuenta_usuario->setUsuarioId($objeto_usuario->getId());
                 $new_cuenta_usuario->save();
                  $con->commit();
                  $this->respuesta = "3010";
                  $this->cod_usuario_paq = $new_usuario_paquete->getId();
                  return sfView::SUCCESS;
                 }catch(Exception $e){
                 $con->rollback();
                   throw $e;
                   $this->respuesta = "3013";
                 return sfView::ERROR;
                 }

            }else{
                $this->respuesta = "3005";
                return sfView::ERROR;
            }
        }

        }else{
            $this->respuesta = "3015";
             return sfView::ERROR;
            }
            }else{
                $this->respuesta = "3017";
                 return sfView::ERROR;
            }
            }else{
                $this->respuesta = "3018";
                 return sfView::ERROR;
            }

            }else{
                $this->respuesta = "3002";
             return sfView::ERROR;
        }
       }catch(Exection $e){
           $this->respuesta = "3001";
           $con->rollback();
       }

}
  public function executeDeposito_usuarios(sfWebRequest $request)
  {
    $request->setRequestFormat('xml');
    $fecha = Time("d/m/a");
    $usuario_id = $request->getParameter('codigo_usuario');
    $monto_de_deposito = $request->getParameter('monto_deposito');
    $tipo_moneda_id = $request->getParameter('moneda_id');
    $numero_orden = $request->getParameter('num_orden');
    $recurso = new myLib();

    try {
       $con = Propel::getConnection();
        $token_seguridad = $request->getParameter('token');
        if($recurso->executeToken($token_seguridad)){
         if($recurso->executeExiste_usuario($usuario_id)){
             if($recurso->executeExiste_moneda($tipo_moneda_id)){
                $monto_procesado = 0;
                 try{
                 $moneda_seleccionada = $recurso->executeRetorna_moneda($tipo_moneda_id);
                 $tipo_de_cambio = $moneda_seleccionada->getTipoCambio();
                 $monto_procesado = $monto_de_deposito / $tipo_de_cambio;
                 $usuario_abono = $recurso->executeRetorna_usuario($usuario_id);
                 $usuario_abono->setCredito($usuario_abono->getCredito() + $monto_procesado);
                 $usuario_abono->save();
                 }catch(Exception $e){
              $con->rollback();
              throw $e;
              $this->respuesta = "3011";
              return sfView::ERROR;
                 }

                 try{

                  $new_registro_deposito = new UsuarioDeposito();
                  $new_registro_deposito->setNumOrden($numero_orden);
                  $new_registro_deposito->setMontoDepositado($monto_de_deposito);
                  $new_registro_deposito->setMontoConvertido($monto_procesado);
                  $new_registro_deposito->setFechaDeposito($fecha);
                  $new_registro_deposito->setTipoMonedaId($tipo_moneda_id);
                  $new_registro_deposito->setUsuarioId($usuario_id);
                  $new_registro_deposito->save();

                 }catch(Exception $e){
                   $con->rollback();
                   throw $e;
                   $this->respuesta = "3012";
                 return sfView::ERROR;
                 }
                try{
                 $new_cuenta_usuario = new EstadoCuentaUsuario();
                 $new_cuenta_usuario->setMonto($monto_procesado);
                 $new_cuenta_usuario->setFechaTrasaccion($fecha);
                 $new_cuenta_usuario->setDescripcionTrasaccion("Recarga de Saldo a Cuenta");
                 $new_cuenta_usuario->setMovimientoOperacion("E");
                 $new_cuenta_usuario->setUsuarioId($usuario_id);
                 $new_cuenta_usuario->save();
                 $con->commit();
                  $this->respuesta = "3010";
                 }catch(Exception $e){
                 $con->rollback();
                   throw $e;
                   $this->respuesta = "3013";
                   return sfView::ERROR;
                 }
             }else{
                 $this->respuesta = "3014";
                 return sfView::ERROR;
             }
         }else{
             $this->respuesta = "3015";
                 return sfView::ERROR;
         }
        }else{
            $this->respuesta = "3002";
                 return sfView::ERROR;
        }
    }catch(Exception $e){
         $con->rollback();
                   throw $e;
                   $this->respuesta = "3001";
                 return sfView::ERROR;
    }
  }
 public function executeTrasferencias_usuarios(sfWebRequest $request)
  {
     $request->setRequestFormat('xml');
     $usuario_emisor = $request->getParameter('id_usu_emisor');
     $usuario_receptor = $request->getParameter('id_usu_receptor');
     $monto_trasferecia = $request->getParameter('monto_transferencia');
     $token_seguridad = $request->getParameter('token');
     $fecha = Time("d/m/a");
     $recurso = new myLib();

    try{
        $con = Propel::getConnection();
        if($recurso->executeToken($token_seguridad)){
             if($recurso->executeExiste_usuario($usuario_emisor)){
                if($recurso->executeExiste_usuario($usuario_receptor)){
                   $usuario_emisor_busqueda = $recurso->executeRetorna_usuario($usuario_emisor);
                   $credito_actual = $usuario_emisor_busqueda->getCredito();
                   if($credito_actual >= $monto_trasferecia ){
                       try {
                            $usuario_emisor_busqueda->setCredito($credito_actual - $monto_trasferecia);
                           $usuario_emisor_busqueda->save();
                       }catch(Exception $e){
                             $con->rollback();
                               throw $e;
                            $this->respuesta = "3009";
                                return sfView::ERROR;
                       }
                       try{
                           $usuario_receptor_busqueda =  $recurso->executeRetorna_usuario($usuario_receptor);
                           $usuario_receptor_busqueda->setCredito($usuario_receptor_busqueda->getCredito() + $monto_trasferecia);
                           $usuario_receptor_busqueda->save();
                       }catch(Exception $e){
                       $con->rollback();
                               throw $e;
                            $this->respuesta = "3008";
                                return sfView::ERROR;
                       }
                       try{
                        $new_registro_trasferecia = new UsuarioTrasferencia();
                        $new_registro_trasferecia->setUsuarioReceptorId($usuario_receptor);
                        $new_registro_trasferecia->setUsuarioEmisorId($usuario_emisor);
                        $new_registro_trasferecia->setFechaCreacion($fecha);
                        $new_registro_trasferecia->setMonto($monto_trasferecia);
                        $new_registro_trasferecia->save();

                       }catch(Exception $e){
                           $con->rollback();
                               throw $e;
                            $this->respuesta = "3007";
                                return sfView::ERROR;
                       }
                       try{
                 $new_cuenta_usuario = new EstadoCuentaUsuario();
                 $new_cuenta_usuario->setMonto($monto_trasferecia);
                 $new_cuenta_usuario->setFechaTrasaccion($fecha);
                 $new_cuenta_usuario->setDescripcionTrasaccion("Trasferecia de Saldo");
                 $new_cuenta_usuario->setMovimientoOperacion("S");
                 $new_cuenta_usuario->setUsuarioId($usuario_emisor);
                 $new_cuenta_usuario->save();
                 $con->commit();
                  $this->respuesta = "3010";
                 }catch(Exception $e){
                 $con->rollback();
                   throw $e;
                   $this->respuesta = "3006";
                   return sfView::ERROR;
                 }

                   }else{
                       $this->respuesta = "3005";
                        return sfView::ERROR;
                   }

         }else{
              $this->respuesta = "3004";
                 return sfView::ERROR;
         }
        }else{
              $this->respuesta = "3003 ";
              return sfView::ERROR;
        }
        }else{
             $this->respuesta = "3002";
                 return sfView::ERROR;
        }


    }catch(Exception $e){
            $con->rollback();
                   throw $e;
       $this->respuesta = "3001";
                 return sfView::ERROR;
    }
  }


}
